// 40. 组合总和 II
// 给定一个数组 candidates 和一个目标数 target， 找出 candidates 中所有可以使数字和为 target 的组合。

// candidates 中的每个数字在每个组合中只能使用一次。

// 说明：

// 所有数字（ 包括目标数） 都是正整数。
// 解集不能包含重复的组合。
// 示例 1:
/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */
var combinationSum2 = function (candidates, target) {
  let n = candidates.length
  let ans = []
  candidates.sort((a,b)=>a-b)
  function helper(target, combine, idx) {
    if (target < 0) {
      return
    }
    if (target === 0) {
      ans.push([...combine])
      return
    }
    for (let i = idx; i < n; i++) {
      if(i>idx && candidates[i] === candidates[i-1]){
        continue
      }
      let value = candidates[i]
      helper(target - value, [...combine,value], i + 1)
    }
  }
  helper(target, [], 0)
  return ans
};
var candidates = [10, 1, 2, 7, 6, 1, 5],
  target = 8
console.log(combinationSum2(candidates, target))
